# Author: slowchen
# Time: 2019/1/21 15:30
# Description:

import datetime

import itchat
import pymysql

# 发送给ssr使用者的文字
send_to_user_msg = '[温馨提示] 截至到%s，您购买的SSR即将过期，请确认是否继续使用\n[SSR信息] %s:%s\n[金额] %s\n[上次付款时间] %s\n[过期时间] %s\n[购买用户] %s'

# 发送给自己（文件传输助手）的文字
send_to_self_msg = '[温馨提示] 截至到%s，有%d位用户购买的SSR即将过期，请联系并确认是否继续使用\n第%d位\n[SSR信息] %s:%s\n[金额] %s\n[上次付款时间] %s\n[过期时间] %s\n[购买用户] %s'


def sql_connect(database):
    conn = pymysql.connect(
        user='root',
        password='root',
        host='127.0.0.1',
        port=3306,
        database=database,
        use_unicode=True,
        charset="utf8"
    )
    return conn


def get_day(days=30):
    """
    获取30天前或者后的时间
    :param days: 根据当前日期，获取将来或过去的日期,正数为将来的日期，负数为过去的日期
    :return: 日期
    """
    now = datetime.datetime.now()
    date = now + datetime.timedelta(days=days)
    date = date.strftime('%Y-%m-%d')
    return date


def get_today():
    today = datetime.datetime.now().strftime('%Y-%m-%d')
    return today


def get_user():
    conn = sql_connect('ssr')
    cursor = conn.cursor()
    cursor.execute(
        'select host,port,price,last_buy_date,customer_type,customer from `order` where last_buy_date<="%s" AND status=0' % get_day(
            days=-30))
    expired_list = cursor.fetchall()
    return expired_list


def send_msg():
    expired_list = get_user()
    if len(expired_list) > 0:

        # 如果过期的列表有数据，登陆微信，热登陆，可保持登陆状态
        itchat.auto_login(hotReload=True)

        # 打印并通过微信发送给用户和自己
        print("请注意，有%d位用户已到期，请催收费用" % len(expired_list))
        print("信息如下：")
        print('=' * 32)

        for expired_user in expired_list:
            host, port, price, last_buy_date, customer_type, customer = expired_user
            expired_day = (last_buy_date + datetime.timedelta(days=30)).strftime('%Y-%m-%d')
            print(send_to_user_msg % (get_today(), host, port, price, last_buy_date, expired_day, customer))
            try:
                # 异常情况，如果备注没有设置，则找不到这个人，会报错，提示去检查
                user = itchat.search_friends(remarkName='vpn%s@%s' % (port, price))[0]
                user.send(send_to_user_msg % (get_today(), host, port, price, last_buy_date, expired_day, customer))
                print('已发送给微信用户：%s' % customer)
            except IndexError:
                print('备注vpn%s@%s未在您的微信好友中找到，请确认是否已修改好友备注，或者检查json文件中数据是否填写正确' % (port, price))
            itchat.send(send_to_self_msg % (get_today(),
                                            len(expired_list),
                                            (expired_list.index(expired_user) + 1),
                                            host,
                                            port,
                                            price,
                                            last_buy_date,
                                            expired_day,
                                            customer),
                        'filehelper')
            print('已发送给文件传输助手')
            print('=' * 32)
    else:
        print('[温馨提示] 截至到今天，暂无到期的用户')
    input('按Enter键关闭窗口')


if __name__ == '__main__':
    send_msg()
